package xfuzzy.alg_genetico.indeterminado.xfghlOld.model.hierStruct;

/**
 * Estructura Jer�rquica
 * 
 * @author Sergio Cala Cordero, Septiembre 2009, Herramienta XFHL
 * 
 */
public class XfghlHierStruct {

	/**
	 * M�dulo de la Estructura Jer�rquica
	 */
	private XfghlINode m;

	/**
	 * N�mero de Variables de la estructura jer�rquica El n�mero de variables
	 * aumenta en 2 cada vez que a�adimos un nivel
	 */
	private int numVar;

	/**
	 * N�mero de m�dulos de la estructura jer�rquica
	 */
	private int numModulos;

	/**
	 * Constructor por defecto
	 * 
	 * public XfghlHierStruct() { this.m=null; this.numVar=-1;
	 * this.numModulos=-1; }
	 */

	/**
	 * Constructor por defecto, crea un sistema inicial
	 */
	public XfghlHierStruct() {
		// Partimos de una estructura basica
		XfghlINode ent1 = new XfghlNode(0, XfghlNode.INPUT);
		XfghlINode ent2 = new XfghlNode(1, XfghlNode.INPUT);
		XfghlINode sal = new XfghlNode(0, XfghlNode.OUTPUT);

		// Identificador del modulo es 1
		this.m = new XfghlModule(ent1, ent2, sal, 0);
		// El sistema inicial tiene 2 variables y 1 modulo
		this.numVar = 2;
		this.numModulos = 1;
	}

	/**
	 * M�todo que modifica
	 * 
	 * @param pos
	 */
	public void insert(int pos) {
		XfghlCounter count = new XfghlCounter(pos);
		this.m = this.m.insert(count, this.numModulos);

		// actualizamos el n�mero de modulos y de variables
		this.numModulos++;
		this.numVar++;
	}

	/**
	 * Constructor
	 * 
	 * @param m
	 *            M�dulo de la estructura
	 * @param conVar
	 *            N�mero de variables de la estructura
	 * @param numModulos
	 *            N�mero de m�dulos de la estructura
	 */
	public XfghlHierStruct(XfghlINode m, int conVar, int numModulos) {
		this.m = m;
		this.numModulos = numModulos;
		this.numVar = conVar;
	}

	/**
	 * 
	 * GETTER AND SETTER
	 */
	public XfghlINode getM() {
		return this.m;
	}

	public void setM(XfghlINode m) {
		this.m = m;
	}

	public int getNumModulos() {
		return this.numModulos;
	}

	public int getNumVar() {
		return this.numVar;
	}
}
